package edu.upn.talbd.proventas.dal;

import edu.upn.talbd.proventas.entidades.Cliente;
import edu.upn.talbd.proventas.entidades.DetalleVenta;
import edu.upn.talbd.proventas.entidades.Producto;
import edu.upn.talbd.proventas.entidades.Telefono;
import edu.upn.talbd.proventas.entidades.Venta;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;

public class VentaDAO {
    public void registrar(Venta objVenta) {
        Connection con = ConnectionManager.getConnection();
        try {
            
            //2. Crear Statement JDBC
            Statement stmt = con.createStatement();
            //3. Crear Sentencias SQL
            String insert = ""
                    + "INSERT INTO venta(numero, fecha, montoTotal, igvTotal, fechaRegistro, idCliente, idEmpleado) "
                    + "VALUES(" 
                    + "'" + objVenta.getNumero()+ "', "
                    + "'" + objVenta.getFecha()+ "', "
                    + objVenta.getMontoTotal() + ", "
                    + objVenta.getIgvTotal()+ ", "
                    + "'" + objVenta.getFechaRegistro() + "', "
                    + objVenta.getIdCliente() + ", "
                    + objVenta.getIdEmpleado() + ")";
            stmt.executeUpdate(insert);
            for(DetalleVenta dt : objVenta.objdeDetalleVenta){
                //System.out.println(“Nombre del Empleado: ” + tmpObjeto.getNombre());
                insert = ""
                    + "INSERT INTO detalleVenta (cantidad, montoParcial, igv, idVenta, idProducto) "
                    + "VALUES(" 
                    + dt.getCantidad() + ", "
                    + dt.getMontoParcial() + ", "
                    + dt.getIgv() + ", "
                    + "(SELECT MAX(id) AS id FROM venta)" + ", "
                    + dt.getIdProducto() +")";
                stmt.executeUpdate(insert);
            }
            
            //4. ResultSet
            //5. Cerrar conexion
            stmt.close();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                con.close();
            } catch (Exception e) {
            }
        }
    }
    
    public ArrayList<Venta> buscar() {
        Connection con = ConnectionManager.getConnection();
        try {
            
            //2. Crear Statement JDBC
            Statement stmt = con.createStatement();
            //3. Crear Sentencias SQL
            //Un objeto ResultSet, almacena los datos de resultados de una consulta
            ResultSet tabla = stmt.executeQuery("SELECT v.id, v.numero, v.fecha, v.montoTotal, v.igvTotal, v.fechaRegistro, v.idCliente, v.idEmpleado "
                                            + "FROM Venta v ");
            
            //System.out.println("Codigo\tNombre");
            ArrayList<Venta> coleccion = new ArrayList<Venta>();
            while(tabla.next()){
                Venta obj = new Venta();
                obj.setId(tabla.getInt(1));
                obj.setNumero(tabla.getString(2));
                obj.setFecha(tabla.getString(3));
                obj.setMontoTotal(tabla.getBigDecimal(4));
                obj.setIgvTotal(tabla.getBigDecimal(5));
                obj.setFechaRegistro(tabla.getString(6));
                obj.setIdCliente(tabla.getInt(7));
                obj.setIdEmpleado(tabla.getInt(8));
                coleccion.add(obj);
                //System.out.println(tabla.getInt(1)+"\t"+tabla.getString(2));
            }
            //4. ResultSet
            //5. Cerrar conexion
            stmt.close();
            return coleccion;
        } catch (Exception e) {
            e.printStackTrace(); 
            ArrayList<Venta> c = new ArrayList<Venta>();
            return c;
        } finally {
            try {
                con.close();
            } catch (Exception e) {
            }
        }
    }
}
